package org.example.day02;

import java.util.Scanner;

/**
 * @author zlxad
 * @version 1.0
 * @description: TODO +
 * 在一个机房中，服务器的位置标识在 n*m 的整数矩阵网格中，1 表示单元格上有服务器，0 表示没有。如果两台服务器位于同一行或者同一列中紧邻的位置，则认为它们之间可以组成一个局域网。<br> 请你统计机房中最大的局域网包含的服务器个数。<br>
 *
 * 在一个机房中，服务器的位置标识在 n*m 的整数矩阵网格中，
 * 1 表示单元格上有服务器，0 表示没有。
 * 如果两台服务器位于同一行或者同一列中紧邻的位置，则认为它们之间可以组成一个局域网。
 * 请你统计机房中最大的局域网包含的服务器个数。
 * @date 2024/3/11 15:22
 */
public class test024 {
    public static int maxLocalNetwork(int n, int m, int[][] grid) {
        int maxCount = 0;
        int[][] count = new int[n][m];
        int[][] directions = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};

        // 遍历服务器位置矩阵，统计每个位置的局域网服务器数量
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                if (grid[i][j] == 1) {  // 如果当前位置有服务器
                    count[i][j] = 1;  // 初始化当前位置的局域网服务器数量为1
                    maxCount = Math.max(maxCount, 1);  // 更新最大局域网服务器数量
                    for (int[] direction : directions) {  // 遍历四个方向
                        int dx = direction[0];
                        int dy = direction[1];
                        int x = i + dx;
                        int y = j + dy;
                        // 判断相邻位置是否在合法范围内且有服务器，如果是则更新局域网服务器数量
                        if (x >= 0 && x < n && y >= 0 && y < m && grid[x][y] == 1) {
                            count[i][j] += 1;
                            maxCount = Math.max(maxCount, count[i][j]);
                        }
                    }
                }
            }
        }

        return maxCount;
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        int[][] grid = new int[n][m];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                grid[i][j] = scanner.nextInt();
            }
        }
        int result = maxLocalNetwork(n, m, grid);
        System.out.println(result);
    }
}

